#!/bin/bash

# Ubuntu 服务器部署脚本
# 使用方法: ./deploy-ubuntu.sh [服务器IP] [用户名]

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 检查参数
if [ $# -lt 2 ]; then
    echo -e "${RED}使用方法: $0 <服务器IP> <用户名>${NC}"
    echo "示例: $0 123.456.789.123 ubuntu"
    exit 1
fi

SERVER_IP=110.42.208.140
USERNAME=ubuntu
PROJECT_NAME="nestjs-game"

echo -e "${GREEN}🚀 开始 Ubuntu 服务器部署...${NC}"
echo -e "${BLUE}服务器IP: $SERVER_IP${NC}"
echo -e "${BLUE}用户名: $USERNAME${NC}"
echo -e "${BLUE}项目名称: $PROJECT_NAME${NC}"

# 检查本地文件
if [ ! -f "docker-compose.yml" ]; then
    echo -e "${RED}❌ 错误: 当前目录不是项目根目录${NC}"
    exit 1
fi

# 创建远程部署目录
echo -e "${YELLOW}📁 创建远程部署目录...${NC}"
ssh $USERNAME@$SERVER_IP "mkdir -p ~/$PROJECT_NAME"

# 复制项目文件到服务器
echo -e "${YELLOW}📤 上传项目文件到服务器...${NC}"
rsync -avz --exclude='node_modules' --exclude='.git' --exclude='dist' --exclude='build' \
    ./ $USERNAME@$SERVER_IP:~/$PROJECT_NAME/

# 在服务器上执行部署
echo -e "${YELLOW}🔧 在服务器上执行部署...${NC}"
ssh $USERNAME@$SERVER_IP << EOF
    cd ~/$PROJECT_NAME
    
    echo "📦 更新系统包..."
    # sudo apt update -y
    
    echo "🔧 安装必要工具..."
    # sudo apt install -y curl wget git nano htop unzip
    
    # 检查并安装 Docker
    if ! command -v docker &> /dev/null; then
        echo "🐳 安装 Docker..."
        curl -fsSL https://get.docker.com -o get-docker.sh
        sudo sh get-docker.sh
        sudo usermod -aG docker \$USER
        newgrp docker
    else
        echo "✅ Docker 已安装"
    fi
    
    # 检查并安装 Docker Compose
    if ! command -v docker-compose &> /dev/null; then
        echo "📦 安装 Docker Compose..."
        sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-\$(uname -s)-\$(uname -m)" -o /usr/local/bin/docker-compose
        sudo chmod +x /usr/local/bin/docker-compose
        # 验证安装
        docker-compose --version
    else
        echo "✅ Docker Compose 已安装"
    fi
    
    # 创建环境变量文件
    if [ ! -f .env ]; then
        echo "⚙️  创建环境变量文件..."
        cat > .env << 'ENVEOF'
# Ubuntu 服务器环境变量配置
# 请根据实际情况修改以下配置

# MySQL 配置
MYSQL_ROOT_PASSWORD=!Huangzhe1220
MYSQL_DATABASE=nestjs_game
MYSQL_USER=hz
MYSQL_PASSWORD=!Huangzhe1220

# Redis 配置
REDIS_PASSWORD=!Huangzhe1220

# JWT 配置
JWT_SECRET=!Huangzhe1220

# 应用配置
NODE_ENV=production
PORT=3000

# 数据库连接配置
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_DB=nestjs_game

# Redis 连接配置
REDIS_HOST=redis
REDIS_PORT=6379

# JWT 配置
JWT_EXPIRES_IN=24h

# CORS 配置
CORS_ORIGIN=http://localhost:3001,http://127.0.0.1:3001

# 文件上传配置
UPLOAD_PATH=uploads
UPLOAD_MAX_SIZE=5242880

# 日志配置
LOG_LEVEL=info
ENVEOF
        echo "📝 请编辑 .env 文件配置环境变量"
        echo "💡 提示：请修改 .env 文件中的密码和密钥"
    fi
    
    # 创建必要的目录
    echo "📁 创建必要的目录..."
    mkdir -p nginx/ssl mysql/init logs backups
    
    # 停止现有容器
    echo "🛑 停止现有容器..."
    docker-compose down 2>/dev/null || true
    
    # 清理旧镜像（可选）
    if [ "\$1" = "--clean" ]; then
        echo "🧹 清理旧镜像..."
        docker-compose down --rmi all --volumes --remove-orphans
    fi
    
    # 构建镜像
    echo "🔨 构建 Docker 镜像..."
    docker-compose build --no-cache
    
    # 启动服务
    echo "🚀 启动服务..."
    docker-compose up -d
    
    # 等待服务启动
    echo "⏳ 等待服务启动..."
    sleep 30
    
    # 检查服务状态
    echo "📊 检查服务状态..."
    docker-compose ps
    
    # 检查服务健康状态
    echo "🏥 检查服务健康状态..."
    for i in {1..10}; do
        if curl -f http://localhost/health &> /dev/null; then
            echo "✅ 服务启动成功！"
            break
        else
            echo "⏳ 等待服务启动... (\$i/10)"
            sleep 10
        fi
    done
    
    # 显示访问信息
    echo ""
    echo "🎉 部署完成！"
    echo ""
    echo "📋 访问信息："
    echo "   - 前端应用: http://$SERVER_IP"
    echo "   - 后端 API: http://$SERVER_IP/api"
    echo "   - 健康检查: http://$SERVER_IP/health"
    echo ""
    echo "📊 服务状态："
    docker-compose ps
    echo ""
    echo "📝 日志查看："
    echo "   - 查看所有服务日志: docker-compose logs -f"
    echo "   - 查看应用日志: docker-compose logs -f app"
    echo "   - 查看数据库日志: docker-compose logs -f mysql"
    echo "   - 查看 Redis 日志: docker-compose logs -f redis"
    echo ""
    echo "🔧 管理命令："
    echo "   - 停止服务: docker-compose down"
    echo "   - 重启服务: docker-compose restart"
    echo "   - 更新部署: ./deploy-ubuntu.sh $SERVER_IP $USERNAME"
    echo "   - 清理部署: ./deploy-ubuntu.sh $SERVER_IP $USERNAME --clean"
    echo ""
EOF

echo -e "${GREEN}✅ Ubuntu 服务器部署完成！${NC}"
echo -e "${YELLOW}📋 访问地址: http://$SERVER_IP${NC}"
echo -e "${YELLOW}📝 查看日志: ssh $USERNAME@$SERVER_IP 'cd ~/$PROJECT_NAME && docker-compose logs -f'${NC}"
echo ""
echo -e "${BLUE}🔧 后续管理命令：${NC}"
echo -e "${BLUE}   - 查看状态: ssh $USERNAME@$SERVER_IP 'cd ~/$PROJECT_NAME && docker-compose ps'${NC}"
echo -e "${BLUE}   - 重启服务: ssh $USERNAME@$SERVER_IP 'cd ~/$PROJECT_NAME && docker-compose restart'${NC}"
echo -e "${BLUE}   - 停止服务: ssh $USERNAME@$SERVER_IP 'cd ~/$PROJECT_NAME && docker-compose down'${NC}" 